#ifndef MENU_H
#define MENU_H

#include "SDLControls.h"
#include "Label.h"
#include "Button.h"
#include "TextBox.h"
#include "PasswordTextBox.h"
#include "GridLayout.h"
#include "Session.h"
#include "DBService.h"
#include "Lista.h"
#include "IteradorLista.h"
#include "ItemEstadistica.h"

typedef void (*CLICK_HANDLER_FUNC)(Widget* widget, const SDL_Event& event);
typedef void (*WRAPPER_JUEGO)(void*);
typedef void (*SDL_CONTROLS_START_HANDLER_FUNC)();
typedef void (*WRAPPER_JUEGO_QUIT)(SDL_CONTROLS_START_HANDLER_FUNC);

class Menu {
	
protected:
	static WRAPPER_JUEGO wrapperPantallaJuego ;
	static WRAPPER_JUEGO_QUIT wrapperPantallaQuitJuego ;

	void static accionSalir(Widget* widget, const SDL_Event& event);
	void static iniciarJuego(Widget* widget, const SDL_Event& event);
	void static start();
	void static pantallaSeleccionJugadores(Widget* widget, const SDL_Event& event);
	void static pantallaRegistrarJugadores(Widget* widget, const SDL_Event& event);
	void static pantallaInicial2(Widget* widget, const SDL_Event& event);
	void static pantallaInicial();
	void static pantallaEstadisticas(Widget* widget, const SDL_Event& event);

	void static rankingPartidosGanados(Widget* widget, const SDL_Event& event);
	void static rankingPuntos(Widget* widget, const SDL_Event& event);
	void static rankingPartidosJugados(Widget* widget, const SDL_Event& event);
	void static pantallaComparacionJugadores(Widget* widget, const SDL_Event& event);
	void static rankingTiempo(Widget* widget, const SDL_Event& event);
	void static compararJugadores(Widget* widget, const SDL_Event& event);
	void static mostrarTabla(const string& descripcion, Lista<ItemEstadistica>* datos);

	void static registrarNuevoJugador(Widget* widget, const SDL_Event& event);
	void static login(Widget* widget, const SDL_Event& event);
	void static popUp(Widget* widget, CLICK_HANDLER_FUNC closeHandler);
	bool static confirm(const string& question);

public:
	Menu();
	void setPantallaJuego(WRAPPER_JUEGO unaPantallaJuego);
	//Funcion a la cual seteare la pantalla a la que volvera al salir del juego
	void setPantallaQuitJuego(WRAPPER_JUEGO_QUIT unaFuncionDeSalida);
	void iniciar();
	~Menu();
};
#endif